home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / modula.arc / SEQUENCE.MOD < prev    next >
Text File  |  1985-05-30  |  1KB  |  63 lines

  1. (* Find sequence of digits 0, 1, 2 and of lengths 1 ... 90, such
  2.    that they contain no two adjacent subsequences that are equal *)
  3.  
  4. MODULE sequence012;
  5.  
  6. FROM  InOut IMPORT Write, WriteString, WriteLn, WriteCard;
  7.  
  8. CONST maxlength = 75;
  9.  
  10. VAR n: CARDINAL;
  11.     good: BOOLEAN;
  12.     s: ARRAY [1..maxlength] OF CARDINAL;
  13.  
  14. PROCEDURE printsequence;
  15. VAR k: CARDINAL;
  16.  
  17. BEGIN
  18.   Write(' ');
  19.   FOR k := 1 TO n DO WriteCard(s[k],1) END;
  20.   WriteLn
  21. END printsequence;
  22.  
  23. PROCEDURE changesequence;
  24. BEGIN
  25.   IF s[n] = 3 THEN
  26.     DEC(n);
  27.     changesequence;
  28.   ELSE
  29.     s[n] := s[n]+1
  30.   END
  31. END changesequence;
  32.  
  33. PROCEDURE try;
  34. VAR i,l,nhalf: CARDINAL;
  35.  
  36. BEGIN
  37.   IF n <= 1 THEN
  38.     good := TRUE
  39.   ELSE
  40.     l := 0; nhalf := n DIV 2;
  41.     REPEAT
  42.       INC(l); i := 0;
  43.       REPEAT
  44.         good := s[n-i] # s[n-l-i];
  45.         INC(i)
  46.       UNTIL good OR (i = l)
  47.     UNTIL NOT good OR (l >= nhalf)
  48.   END
  49. END try;
  50.  
  51. BEGIN
  52.   n := 0;
  53.   REPEAT
  54.     INC(n);
  55.     s[n] := 1; try;
  56.     WHILE NOT good DO
  57.       changesequence;
  58.       try
  59.     END;
  60.     printsequence;
  61.     UNTIL n = maxlength
  62.   END sequence012.
  63.